export default class Bean {
  toJSON(): Record<string, any> {
    const result: Record<string, any> = {}

    // 遍历所有实例属性（仅遍历可枚举的实例属性）
    for (const key in this) {
      if (Object.prototype.hasOwnProperty.call(this, key)) {
        const value = (this as any)[key]
        // 忽略函数类型属性
        if (typeof value === "function") continue

        // 如果值为对象，并且具有 toJSON 方法，则调用该方法
        if (value && typeof value === "object") {
          if (typeof value.toJSON === "function") {
            result[key] = value.toJSON()
          } else if (Array.isArray(value)) {
            // 如果是数组，遍历数组中的每一项处理
            result[key] = value.map((item) =>
              item &&
              typeof item === "object" &&
              typeof item.toJSON === "function"
                ? item.toJSON()
                : item
            )
          } else {
            result[key] = value
          }
        } else {
          result[key] = value
        }
      }
    }

    return result
  }
}
